using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using DominioSATT;
using RepositorioSATT.Conexiones;

namespace RepositorioSATT
{
    public class SedeRepositorio:ISedeRepositorio,IMapeadorFila<Sede>
    {
        protected Conexion conn = new Conexiones.Conexion();
        protected DataTable dt = new DataTable();
        protected string sql = "";
        IMapeadorFila<Sede> mapear;

        #region ISedeRepositorioSATT Members

        public List<Sede> Listar(int idclub)
        {
            sql = "select * from  Sedes where IdClub = " + idclub;
            dt = conn.Listar(sql);
            List<Sede> Lista = new List<Sede>();
            foreach (System.Data.DataRow dr in dt.Rows)
            {
                mapear = this;
                Lista.Add(mapear.MapearTabla(dr));
            }
            return Lista;
        }
        public Sede Buscar(string Nombre)
        {
            sql = " select * from Sedes where Nombre = '" + Nombre + "'";
            DataRow Dr = conn.Buscar(sql);
            mapear = this;
            return mapear.MapearTabla(Dr);
        }
        public Sede BuscarPorId(int Idsede)
        {
            sql = " select * from Sedes where Idsede = " + Idsede;
            DataRow Dr = conn.Buscar(sql);
            mapear = this;
            return mapear.MapearTabla(Dr);
        }
        public int Agregar(Sede Objeto)
        {
            string datos = "'" + Objeto.Nombre + "','" + Objeto.Contacto.Email + "','" + Objeto.Domicilio.Direccion + "','" + Objeto.Contacto.Telefono + "'," + Objeto.Domicilio.Localidad.Id + "," + Objeto.Club.Idclub + ",'" + Objeto.Estado.ToString() + "'," + Objeto.CantidadCanchas;
            int id = conn.Agregar("Sedes", "Nombre,Email,Direccion,Telefono,IdLocalidad,IdClub,Estado,CantCanchas", datos);
            return id;
        }
        public void Actualizar(Sede Objeto)
        {
            string datos = "Nombre = '" + Objeto.Nombre + "',Email = '" + Objeto.Contacto.Email + "',Direccion = '" + Objeto.Domicilio.Direccion + "',Telefono = '" + Objeto.Contacto.Telefono + "',IdLocalidad = " + Objeto.Domicilio.Localidad.Id + ",IdClub = " + Objeto.Club.Idclub + ",Estado = '" + Objeto.Estado.ToString() + "', CantCanchas = " + Objeto.CantidadCanchas;
            sql = " Update Sedes set " + datos + " Where Idsede = " + Objeto.Idsede;
            conn.ActualizarOEliminar(sql);
        }

        #endregion

        #region IMapeadorFila<Sede> Members

        public Sede MapearTabla(System.Data.DataRow fila)
        {
            Sede retorno = null;
            if(fila != null)
            {
                //Atributos de Root Entity
                int IdSede = (fila.IsNull("IdSede"))==true ? 0 : Convert.ToInt32(fila["IdSede"]);
                string Nombre = (fila.IsNull("Nombre") == true ? string.Empty : Convert.ToString(fila["Nombre"]));
                bool Estado = (fila.IsNull("Estado") == true ?false : Convert.ToBoolean(fila["Estado"]));
                string Email = (fila.IsNull("Email") == true ? string.Empty : Convert.ToString(fila["Email"]));
                string Telefono = (fila.IsNull("Telefono") == true ? string.Empty : Convert.ToString(fila["Telefono"]));
                int CantCanchas = (fila.IsNull("CantCanchas"))==true ? 0 : Convert.ToInt32(fila["CantCanchas"]);
                //Atributos de Value Object Domicilio
                int IdLocalidad = (fila.IsNull("IdLocalidad"))==true ? 0 : Convert.ToInt32(fila["IdLocalidad"]);
                Localidad nLoc = new Localidad();
                Pais nPais = new Pais();
                Provincia nProv = new Provincia();
                Pais nNac = new Pais();
                string Direccion = (fila.IsNull("Direccion") == true ? string.Empty : Convert.ToString(fila["Direccion"]));
                ILocalidadRepositorio LocRepo = new UbicacionRepositorio();
                nLoc.Nombre=LocRepo.ObtenerLocalidad(IdLocalidad);
                nProv.Nombre= LocRepo.ProvinciaLocalidad(IdLocalidad);
                nPais.Nombre= LocRepo.PaisLocalidad(IdLocalidad);
                Domicilio Domic = new Domicilio(nPais,nProv,nLoc,Direccion);
                Contacto Contacto = new Contacto(Telefono, "", Email);
                IClubRepositorio clubrepo = new ClubRepositorio();
                Club Club = clubrepo.Buscar(Convert.ToInt32(fila["IdClub"]));
                retorno = new Sede(IdSede,Nombre,Domic,Contacto,Club,Estado,CantCanchas);
            }
            return retorno;
        }

        #endregion

        #region ISedeRepositorio Members


        public DataTable ReporteSede()
        {
            sql = "select s.Nombre as Sede,Direccion,Telefono,Email,l.Nombre as Localidad,c.Nombre as Club,CantCanchas from Sedes s inner join Club c on s.idclub = c.idclub INNER JOIN Localidades L on s.IdLocalidad = l.IdLocalidad inner join provincias p on l.idprovincia = p.idprovincia";
            dt = conn.Listar(sql);
            return dt;
        }

        #endregion

    }
}
